use std::fmt::Debug;

struct YourType;

trait TraitB {}
trait TraitC {}
trait TraitE {}
trait TraitF {}
trait MyTrait<A, D> {}
// impl<A: TraitB + TraitC, D: TraitE + TraitF> MyTrait<A, D> for YourType {}

impl<A, D> MyTrait<A, D> for YourType
where
    A: TraitB + TraitC,
    D: TraitE + TraitF,
{
}

trait PrintInOption {
    fn print_in_option(self);
}

impl<T> PrintInOption for T
where
    Option<T>: Debug,
{
    fn print_in_option(self) {
        println!("{:?}", Some(self));
    }
}

fn main() {
    let vec = vec![1, 2, 3];

    vec.print_in_option();
}
